package technical;

import exceptions.ExFileException;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;

/**
 *
 * @author Tania M
 */
public class ClInit {

    //classe permettant d'initialiser une partie des variables du programme
    //par exemple, ou se trouvent les fichiers de favoris, préférences, BDD...
    //Ces valeurs peuvent etre stockees dans un fichier de preferences au premier lancement
    //et lues ensuite par ClInit...
    private static String __currentRunning; //donne l'adresse courante avec laquelle l'appli a été lancée 
    /*
     * Main window variables
     */
    private static int __mainWidth = 800;
    private static int __mainHeight = 600;
    private static String __mainTitle = "Navigateur, Explorateur, Multimédia And RSS";
    private static String __mainInitialModule = "BROWSER";
    
    private static String __systemName = System.getProperty ( "os.name" );
    private static String __systemVersion = System.getProperty ( "os.version" );

    /*
     * Browser variables
     */
    private static String __browserDefaultHomePage = "http://www.google.fr";
    private static int __browserMaxTabNumber = 10;
    private static int __browserMaxTabLenght = 30;
    /*
     * Explorer variables
     */
    private static String __explorerDefaultHomePage = "/";
    /*
     * Multimedia variables
     */
    private static String __musicFolder = "/media/Data/Musique";

    /*
     * RSS variables
     */
    private static String __listFeedAdress;
    private static String __hibernateRssConfPath = "src/hibernateRSS.cfg.xml"; //normalement, inutile (cf méthode)
    private static String __hibernateRssDatabasePath = "nemarRSS.db"; //normalement, inutile (cf méthode)

    /**
     * @return the __mainWidth
     */
    public static int getMainWidth() {
        return __mainWidth;
    }

    /**
     * @return the __mainHeight
     */
    public static int getMainHeight() {
        return __mainHeight;
    }
    
    public static String getSystemName() {
        return __systemName;
    }
    
    public static String getSystemVersion() {
        return __systemVersion;
    }

    /**
     * @return the _mainTitle
     */
    public static String getMainTitle() {
        return __mainTitle;
    }

    /**
     * @return the _mainInitialModule
     */
    public static String getMainInitialModule() {
        return __mainInitialModule;
    }

    /**
     * @return the __browserDefaultHomePage
     */
    public static String getBrowserDefaultHomePage() {
        return __browserDefaultHomePage;
    }

    /**
     * @return the __browserMaxTabNumber
     */
    public static int getBrowserMaxTabNumber() {
        return __browserMaxTabNumber;
    }

    /**
     * @return the __browserMaxTabLenght
     */
    public static int getBrowserMaxTabLenght() {
        return __browserMaxTabLenght;
    }

    /**
     * @return the __explorerDefaultHomePage
     */
    public static String getExplorerDefaultHomePage() {
        return __explorerDefaultHomePage;
    }

    /**
     * @return the __musicFolder
     */
    public static String getMusicFolder() {
        return __musicFolder;
    }

    /**
     * @return the __listFeedAdress
     */
    public static String getListFeedAdress() {
        return __listFeedAdress;
    }

    /**
     * @param a_listFeedAdress the __listFeedAdress to set
     */
    public static void setListFeedAdress(String a_listFeedAdress) {
        __listFeedAdress = a_listFeedAdress;
    }

    /**
     * @return the __hibernateRssConfPath
     */
    public static String getHibernateRssConfPath() {
        return __hibernateRssConfPath;
    }

    /**
     * @param a_hibernateRssConfPath the __hibernateRssConfPath to set
     */
    public static void setHibernateRssConfPath(String a_hibernateRssConfPath) {
        __hibernateRssConfPath = a_hibernateRssConfPath;
    }

    /**
     * @return the __hibernateRssDatabasePath
     */
    public static String getHibernateRssDatabasePath() {
        return __hibernateRssDatabasePath;
    }

    /**
     * @param a_hibernateRssDatabasePath the __hibernateRssDatabasePath to set
     */
    public static void setHibernateRssDatabasePath(String a_hibernateRssDatabasePath) {
        __hibernateRssDatabasePath = a_hibernateRssDatabasePath;
    }

    //Initialise les adresses des fichiers de configuration hibernate
    public static void initializeHibernateConf() throws ParserConfigurationException, SAXException, IOException {
        /*
         * Document hibernateDocument = null; DocumentBuilderFactory factory =
         * null; factory = DocumentBuilderFactory.newInstance(); DocumentBuilder
         * hibernateBuilder = factory.newDocumentBuilder(); hibernateDocument =
         * hibernateBuilder.parse(__hibernateRssConfPath); //permet de créer
         * l'arbre DOM du fichier de configuration NodeList theFoundList =
         * hibernateDocument.getElementsByTagName("property"); for (int cpt = 0;
         * cpt < theFoundList.getLength(); cpt++) { //recherche du noeud puis
         * modification de la valeur
        }
         */
        String adresseBDD = null;
        String adresseFichierConfig = null;

        String path = new java.io.File("").getAbsolutePath();
        //System.out.println(path);
        path = path.replaceAll("\\\\", "/"); //pour Windows
        //System.out.println(path);
        __currentRunning = path;

        adresseBDD = __currentRunning + "/BDD/nemarRSS.db";
        adresseFichierConfig = __currentRunning + "/src/hibernateRSS.cfg.xml"; //adressage relatif
        File f = new File(adresseFichierConfig);
        if (f.exists()) {
            f.delete(); //supprime le fichier existant pour le mettre à jour
        }
        f.createNewFile();

        //System.out.println(adresseFichierConfig);

        ModifyXml modify = new ModifyXml();
        modify.modifyNemarHibernateConfig(adresseBDD, adresseFichierConfig);
    }

    public static void checkABonnementsFile() throws IOException, ExFileException {
        //vérifie si le fichier d'abonnements existe.
        //S'il existe, il ne fait rien, sinon il le créé
        String path = new java.io.File("").getAbsolutePath();
        //System.out.println(path);
        path = path.replaceAll("\\\\", "/"); //pour Windows
        //System.out.println(path);
        __currentRunning = path;

        String fichierAbos = __currentRunning + "/src/abos.txt";
        __listFeedAdress = fichierAbos;

        File f = new File(fichierAbos);

        if (!f.exists()) { //si le fichier n'existe pas, création
            ModifyXml modify = new ModifyXml();
            ModifyFileContent writer = new ModifyFileContent();
            writer.overwriteWholeFile(fichierAbos, "http://www.developpez.com/index/rss"); //adresse par défaut car sinon, le fichier n'est pas écrit
        }
    }

    public static String checkAbonnementsFileAtStart() {
        //vérifie si le fichier d'abonnements existe.
        //S'il existe, il ne fait rien, sinon il le créé
        String path = new java.io.File("").getAbsolutePath();
        //System.out.println(path);
        path = path.replaceAll("\\\\", "/"); //pour Windows
        //System.out.println(path);
        __currentRunning = path;

        String fichierAbos = __currentRunning + "/src/abos.txt";
        __listFeedAdress = fichierAbos;

        File f = new File(fichierAbos);

        if (!f.exists()) { //si le fichier n'existe pas, création
            ModifyXml modify = new ModifyXml();
            ModifyFileContent writer = new ModifyFileContent();
            try {
                writer.overwriteWholeFile(fichierAbos, "http://www.developpez.com/index/rss"); //adresse par défaut car sinon, le fichier n'est pas écrit
            } catch (IOException ex) {
                Logger.getLogger(ClInit.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            } catch (ExFileException ex) {
                Logger.getLogger(ClInit.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            }
        }

        return __listFeedAdress;
    }
}
